package cn.demoncat.util.lang.entity.report;

import cn.demoncat.util.lang.constant.LongConstant;
import cn.demoncat.util.lang.constant.StringConstant;
import lombok.Data;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 通用报表数据
 * 
 * @author 延晓磊
 * @since 2021年11月24日
 */
@Data
public class CommonReportEntity implements ReportEntity{

    // 统计分类/数据类型
    private String type = StringConstant.EMPTY;
    // 统计项/数据ID
    private String item = StringConstant.EMPTY;
    // 统计标题/数据名称
    private String title = StringConstant.EMPTY;
    // 统计数量/整数值
    private Long count = LongConstant.N0;
    // 统计金额/浮点值
    private BigDecimal sum = BigDecimal.ZERO;
    // 统计时间
    private String date;
    // 统计时间-年
    private Integer year;
    // 统计时间-月
    private Integer month;
    // 统计时间-日
    private Integer day;
    // 统计时间-时
    private Integer hour;
    // 创建时间
    private LocalDateTime createTime;

    /**
     * 构建
     *
     * @param date	报表时间：yyyy-MM-dd 或 yyyy-MM-dd HH:mm:ss
     *
     * @return 报表源数据，填充时间属性
     *
     * @author 延晓磊
     *
     * @since 2020年7月13日
     */
    public static CommonReportEntity build(String date) {
        CommonReportEntity report = new CommonReportEntity();
        report.fillTimes(date);
        return report;
    }

    /**
     * 构建
     *
     * @param date	报表时间（已格式化）
     *
     * @return 报表源数据，填充时间属性
     *
     * @author 延晓磊
     *
     * @since 2020年7月13日
     */
    public static CommonReportEntity build(LocalDate date) {
        CommonReportEntity report = new CommonReportEntity();
        report.fillTimes(date);
        return report;
    }

    /**
     * 构建
     *
     * @param date	报表时间（已格式化）
     *
     * @return 报表源数据，填充时间属性
     *
     * @author 延晓磊
     *
     * @since 2020年7月13日
     */
    public static CommonReportEntity build(LocalDateTime date) {
        CommonReportEntity report = new CommonReportEntity();
        report.fillTimes(date);
        return report;
    }

    /**
     * 构建
     *
     * @param datas	统计列表
     * @return
     *
     * @author 延晓磊
     *
     * @since 2020年7月13日
     */
    public static List<CommonReportEntity> build(List<DateCount> datas){
        return datas.stream().map(e -> {
            CommonReportEntity report = CommonReportEntity.build(e.getDate());
            report.setCount(e.getCount());
            report.setSum(e.getSum());
            return report;
        }).collect(Collectors.toList());
    }


 
}
